from . import profile_blue
from ihome.utils.image_storage import storage
from flask import request, g, redirect, session,jsonify, current_app
from ihome.utils.response_code import RET
from ihome.utils.commons import login_required
from ihome.models import User
from ihome import db,constants

@profile_blue.route('/')
@login_required
def user_info():
    """许彬彬"""
    """获取用户信息
    1 尝试获取用户信息
    2 如果用户未登录,重定向到项目首页
    3 返回用户基本信息
    """
    user = g.user
    if not user:
        return redirect('/')
    data = {
        'avatar_url':constants.QINIU_DOMIN_PREFIX + user.avatar_url if user.avatar_url else '',
        'name':user.name,
        'mobile':user.mobile
    }
    return jsonify(errno=RET.OK, errmsg='OK', data=data)


@profile_blue.route('/name',methods=['POST'])
@login_required
def modify_name():
    """许彬彬"""
    #用户名修改

    user = g.user
    #post请求,获取参数：
    name = request.json.get('name')
   #检查用户名参数
    if not name:
        return jsonify(errno=RET.PARAMERR,errmsg='参数错误')
    #保存用户信息
    user.name = name
    #提交数据
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR,errmsg='保存用户信息失败')
    #更新redis中的缓存信息
    session['name'] = name
    #返回结果
    return jsonify(errno='0',errmsg='OK')





@profile_blue.route('/avatar',methods=['POST'])
@login_required
def upload_avatar():
    """许彬彬"""
    """上传个人头像
    1 判断用户是否登录
    2 post请求,获取文件avatar
    avatar = request.files.get('avatar')
    3 判断参数是否存在
    4 读取图片文件
    5 调用七牛云,上传图片
    6 保存图片的地址
    7 返回前端图片地址
    """
    #用户登录
    user = g.user
    if request.method == 'post':
        data = {
            'user':user.to_dict()
        }
        return jsonify(errno=RET.OK,errmsg='OK',data=data)
    #获取参数
    avatar = request.files.get('avatar')
    #检查参数
    if not avatar:
        return jsonify(errno=RET.PARAMERR,errmsg='参数错误')
    #读取图片数据
    try:
        image_data = avatar.read()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAERR,errmsg='数据读取错误')
    #调用七牛云,获取七牛云返回的图片名称
    try:
        image_name = storage(image_data)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.THIRDERR,errmsg='上传图片异常')
    #保存图片名称到mysql数据库
    #在数据库存储：1 绝对路径=外链域名+图片名称
    user.avatar_url = image_name
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR,errmsg='保存图片数据失败')
    #拼接字符串,返回前端图片的绝对路径
    avatar_url = constants.QINIU_DOMIN_PREFIX + image_name
    #定义字典数据
    data = {
        'avatar_url':avatar_url
    }
    #返回结果
    return jsonify(errno='0',errmsg='OK',data=data)




@profile_blue.route('/auth',methods=['GET','POST'])
@login_required
def auth():
    """米治国"""
    """获取用户实名信息"""
    user = g.user

    if request.method == 'GET':

        return jsonify(errno=RET.OK, errmsg='OK',data=user.to_auth_info())

    """设置用户实名信息"""
    real_name = request.json.get("real_name")
    id_card = request.json.get("id_card")

    if not all([real_name,id_card]):
        return jsonify(errno=RET.PARAMERR,errmsg='参数错误')

    user.real_name = real_name
    user.id_card = id_card

    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg='保存用户信息失败')

    return jsonify(errno=RET.OK, errmsg='OK')


